﻿#pragma once

namespace FileUtils
{
	// 拆解Windows文件路径。（封装Windows的splitpath方法）
	// path：全路径
	// drive：盘符
	// dir：除去盘符和文件名，中间的那段路径
	// fname：文件名，不包含扩展名
	// ext：文件扩展名，包含那个点
	COMMON_LIB_API void SplitPath(const TCHAR *path, TCHAR *drive,
		TCHAR *dir, TCHAR *fname, TCHAR *ext);

	// 获取文件名
	COMMON_LIB_API CString GetFileName(const TCHAR *path, bool bIncludeExt = false);

	// 获取文件路径。盘符+路径，不含文件名和扩展名。
	COMMON_LIB_API CString GetFilePath(const TCHAR *path);

	// 编码格式
	enum CodingForm
	{
		eUnableJudge,		// 无法判断
		eANSI,				// ansi
		eUnicode,			// unicode 小端序
		eUnicodeBigEndian,	// unicode 大端序
		eUTF_8,				// utf-8 whih bom
		eUTF_8NoBOM,		// 无bom的utf-8.意味着是通过程序判断的。
	};

	// 判断指定文件的编码格式
	CodingForm GetFileCodingForm(LPCTSTR lpFilePath);

	// 返回指定字符串中符合GB18030、GBK、GB2312等中文编码格式的字符数量。仅判断ASCII以上部分。
	unsigned long GetCountGBK(const char* str, unsigned long strLength);

	// 返回指定字符串中符合utf-8编码格式的字符数量。（字符串中不包含utf-8的bom）仅判断ASCII以上部分。
	unsigned long GetCountUTF_8(const char* str, unsigned long strLength);
}